package com.tofacebook.mybatis.mapper;

import com.tofacebook.mybatis.model.Category;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 特殊的sql:  1.模糊查询，
 *            2.批量删除，
 *            3.设置动态的表名，
 *            4.获取我们主键cat_id
 */
public interface SpecialMapper {

    /**
     * 模糊查询规则：
     * 根据前端传过来的某些字符或者汉字去数据库表里面检索是否包含
     * 包含就返回对应的结果集
     * 否则就返回空的
     * 返回类型：返回的集合是一条或者多条数据 List
     * List<Map<String,Object>> 和 List<Category>  这两种哪一种比较好呢
     * List<Category>  因为在前端循环遍历是我们对象的属性的值
     * List<Map<String,Object>>  这里面存放的是数据字段名，我们还需要做一个字段于对象属性的映射关系
     *
     */
    List<Category> getListByKeyWord(@Param(value="keyword") String keyword);

    List<Map<String,Object>> getMapByKeyWord(@Param(value="keyword") String keyword);

    /**
     *
     * @param catIds 结构要满足  1448,1449,1450
     * @return
     */
    int deleteCategorysByCatIds(@Param(value="catIds") String catIds);

    /**
     * 设置表名 使用${}
     *
     */
    List<Category> selectCategoryByTableName(@Param(value="tableName") String tableName);

    /**
     * 需求：我们新增一条数据，需要及时的编辑修改，然后编辑修改需要使用主键id去update
     * 这时候我们需要获取这个主键id返回给前端，不需要重复去查询一下
     * 以对象的形式去保存数据
     */
    long insertCategotyInfo(Category category);

    /***
     * 多条件查询
     */
    Category getCategoryByParams(Category category);

    /**
     * 根据实体类去查询集合信息
     * @param category
     * @return  集合
     */
    List<Category> getCategoryByCategory(Category category);

    /**
     * 当某一个属性的值有多种情况的时候需要我们做多条件的判断
     * if 他不能满足这种多情况的判断，
     *  那么就可以使用 choose  when otherwise 来做多条件的判断
     *  查询条件里面 ：choose when otherwise
     */
    List<Category> getCategoryByChoose(Category category);

    /**
     * 查询出结果需要使用 多条件判断，将数字转换成对应的中文
     * 使用case when end
     */
    List<Category> getCategoryByCase(Category category);
}
